#include <iostream>
#include <vector>
#include "Basics.h"
#include "FunctionsAndPointers.h"
#include "Structs.h"
#include "Dog.h" // 包含 Dog.h 会自动包含 Animal.h
#include "Cat.h"
#include "modern.hpp"

// --- 多态 ---
// 多态（Polymorphism）意味着“多种形态”。在OOP中，它允许我们使用一个统一的接口（如基类指针）
// 来处理不同类型的对象（如 Dog, Cat）。
// 当通过基类指针调用一个虚函数时，C++会根据指针实际指向的对象类型来决定调用哪个版本的函数。
// 这被称为“动态绑定”或“运行时多态”。
void animalInteraction(Animal* animal) {
    std::cout << "\n--- Interaction begin---" << std::endl;
    std::cout << "hello, " << animal->getName() << "!" << std::endl;
    animal->makeSound(); // 这里会根据 animal 的实际类型调用 Dog::makeSound 或 Cat::makeSound
    animal->eat();
    std::cout << "--- Interaction end ---" << std::endl;
}

int main() {
    // 1. 演示基础知识
    ShowBasics();

    // 2. 演示函数、指针和引用
    ShowFunctionsAndPointers();

    // 新增：演示结构体
    ShowStructs();

    // 3. 演示类、对象和继承
    Dog myDog("wangwang",6);
    myDog.makeSound();
    myDog.eat();
    myDog.WagTail();
    std::cout << "----------------------------\n" << std::endl;

    // 4. 演示多态
    std::cout << "--- multiple inheritance ---" << std::endl;
    
    // 创建一个 Dog 对象和一个 Cat 对象
    Dog* dogPtr = new Dog("wangwang",6);
    Cat* catPtr = new Cat("XiKa",4);

    // 使用 animalInteraction 函数与它们互动
    // 即使函数参数是 Animal*，它也能正确处理 Dog 和 Cat 对象
    animalInteraction(dogPtr);
    animalInteraction(catPtr);

    std::cout<<"modern cpp test:"<<std::endl;
    
    modern_main();
    return 0; // 程序成功结束
}
